<script lang="ts" setup>
import type { VbenFormSchema } from '@vben/common-ui';
import type { BasicOption } from '@vben/types';

import { computed, markRaw, onMounted } from 'vue';

import { AuthenticationLogin, SliderCaptcha, z } from '@vben/common-ui';
import { $t } from '@vben/locales';

import { useAuthStore } from '#/store';
import { checkIp, getIpAddress } from '#/util/auth';

defineOptions({ name: 'Login' });

const authStore = useAuthStore();

const MOCK_USER_OPTIONS: BasicOption[] = [
  // {
  //   label: 'Super',
  //   value: 'vben',
  // },
  {
    label: '管理员',
    value: 'admin',
  },
  // {
  //   label: 'User',
  //   value: 'jack',
  // },
];

const formSchema = computed((): VbenFormSchema[] => {
  return [
    {
      component: 'VbenSelect',
      componentProps: {
        options: MOCK_USER_OPTIONS,
        placeholder: $t('authentication.selectAccount'),
      },
      fieldName: 'selectAccount',
      label: $t('authentication.selectAccount'),
      rules: z
        .string()
        .min(1, { message: $t('authentication.selectAccount') })
        .optional()
        .default('admin'),
    },
    {
      component: 'VbenInput',
      componentProps: {
        placeholder: $t('authentication.usernameTip'),
      },
      dependencies: {
        trigger(values, form) {
          if (values.selectAccount) {
            const findUser = MOCK_USER_OPTIONS.find(
              (item) => item.value === values.selectAccount,
            );
            if (findUser) {
              form.setValues({
                urPassword: 'admin',
                urUsername: 'admin',
              });
            }
          }
        },
        triggerFields: ['selectAccount'],
      },
      fieldName: 'urUsername',
      label: $t('authentication.username'),
      rules: z.string().min(1, { message: $t('authentication.usernameTip') }),
    },
    {
      component: 'VbenInputPassword',
      componentProps: {
        placeholder: $t('authentication.password'),
      },
      fieldName: 'urPassword',
      label: $t('authentication.password'),
      rules: z.string().min(1, { message: $t('authentication.passwordTip') }),
    },
    {
      component: markRaw(SliderCaptcha),
      fieldName: 'captcha',
      rules: z.boolean().refine((value) => value, {
        message: $t('authentication.verifyRequiredTip'),
      }),
    },
  ];
});

//登录之前需要获取当前登录的ip
const getIpAddressT=()=>{
    checkIp()
}
onMounted(()=>{
   getIpAddressT()
})
</script>

<template>
  <AuthenticationLogin
    :form-schema="formSchema"
   :showThirdPartyLogin="false"
   :show-forget-password="false"
   :showCodeLogin="false"
   :show-qrcode-login="false"
   :show-register="false"
    :loading="authStore.loginLoading"
    @submit="authStore.authLogin"
  />
</template>
